/*
 * DIM-SUM操作系统 - 系统调用入口
 *
 * Copyright (C) 2023 国科础石(重庆)软件有限公司
 *
 * 作者: Dong Peng <w-pengdong@kernelsoft.com>
 *
 * License terms: GNU General Public License (GPL) version 3
 *
 */
#include <linux/compiler.h>
#include <dim-sum/errno.h>
#include <dim-sum/types.h>
#include <dim-sum/bug.h> 
#include <dim-sum/syscall.h>
#include <uapi/asm-generic/unistd.h>
#include <asm/syscall_entry.h>
/**
 * #undef __SYSCALL
 * #define __SYSCALL(nr, sym)	[nr] = sym,
 * 目前很多API未实现（在include/uapi/asm-generic/unistd.h文件中）
 * 故而注释掉
 */
#undef __SYSCALL
#define __SYSCALL(nr, sym)	[nr] = sym,
/**
 * 系统调用函数表
 * 注意exception.S中使用了adrp指令，所以syscall_table必须4KB对齐
 */
syscall_t syscall_table[__NR_syscalls] __aligned(4096) = {
	[0 ... __NR_syscalls - 1] = sys_call_unknown,
	/**
	 * 包含API函数定义
	 */
	#include <asm/unistd.h>
};

long sys_call_unknown(void)
{
	register u64 nr asm ("a7");
	pr_info("This system calls[%ld]:%s is not implemented!!!!!!!\n", nr, __func__);
	return -ENOSYS;
}

long syscall_entry(struct exception_spot *s, unsigned long nr)
{
	long ret;
	
	ret = sys_call_unknown();
	/**
	 * 设置系统调用的返回值
	 */
	return ret;
}
